home *** CD-ROM | disk | FTP | other *** search
- /******************************************************************************
- *
- * NSSDC/CDF CDFskeleton. Part 2 of 2.
- *
- * Version 1.0, 4-Mar-92, ST Systems (STX)
- *
- * Modification history:
- *
- * V1.0 4-Mar-92, S Sudarsan Original version. This is a crunching
- * J Love together of all the separate files which
- * used to make up CDFskeleton. Two source
- * files necessary for IBM PC compilation.
- *
- ******************************************************************************/
-
- #include "cdfdist.h"
- #include "skt2cdf.h"
-
- /*****************************************************************************/
-
- void AnalyseNRVData(num_values, numdims, var_name, str_len)
- /* called after encountering a . */
- long num_values;/* the number of NRV values to be read */
- long numdims;
- char *var_name;
- long str_len;
- {/* assumed that when this is called the cdf_data_type is that of the var */
-
- long count = 0, len, flag, offset, diff;
- char *buff, *dummy_ptr, *temp_addr,
- *temp_ptr;
- long num_index, var_data_type, *index_ptr, prev_offset;
-
- while(count < num_values)
- {
- flag = 0;
-
- while(flag != 1)
- {
- prev_offset = ftell(file_ptr);/* the position before the NRV
- values or new variable name */
-
- if(fgets(obuffer, 134, file_ptr) == NULL)
- {
- if (mLog) {
- fprintf(stderr, "\nINCORRECT NRV DATA SPECIFICATION\n");
- fprintf(stderr,"%s\n",obuffer);
- }
- DeleteCDF(id);
- ExitBAD;
- }
-
- len = strlen(obuffer);
-
- *(obuffer + (len -1)) = '\0';
-
- buff = TrimBlanks(obuffer);
-
- switch(*buff)
- {
- case '!':
- break;
- case '\0':
- break;
- default:
- flag++;
- break;
- }/* end switch */
- }/* end while */
-
-
-
- if(*buff != '[')/*no data in the skeleton table */
- {
-
- if(fseek(file_ptr, prev_offset, 0) != 0)/* move back */
- {
- if (mLog) fprintf(stderr, "Could not reposition file pointer\n");
- DeleteCDF(id);
- ExitBAD;
- }
-
- ReadNRVFile(num_values, numdims, var_name, str_len);
-
- return;/* get back to variable line and return */
- }
-
- buff++;/* move past the [ */
-
-
-
- buff = TrimBlanks(buff);
-
-
- if((*buff == '\0')||(*buff == '!'))
- buff = ProcessWrapLines(file_ptr, obuffer,
- "\nINCORRECTLY SPECIFIED INDICE FOR NRV DATA\n");
-
-
- ParseNumericValue(file_ptr, buff, ']',
- "\nINCORRECTLY SPECIFIED INDICE FOR NRV DATA\n");/* loaded in str_ptr */
- /*num_index = ProcessNumericString();*//* dimension of the matrix*/
-
-
- if(!numdims && !strlen(str_ptr))
- {
- free(str_ptr);
- str_ptr = (char *) malloc(2);/* one for a value one for \0 */
- strcpy(str_ptr, "0");
- num_index = ProcessNumericString();
- num_index--;/* was 1 now 0 */
- }
- else
- {
- num_index = ProcessNumericString();
-
- if(num_index != numdims)
- {
- if (mLog) fprintf(stderr,
- "\nINCORRECTLY SPECIFIED INDICE FOR NRV DATA\n");
- DeleteCDF(id);
- ExitBAD;
- }
- }
-
-
- var_data_type = cdf_data_type;/* copy the current type*/
- cdf_data_type = CDF_INT4;/* for the array indexes */
-
- TypeConvertString(num_index); /* int4_ptr has it *//*V 1.4*/
-
- cdf_data_type = var_data_type;
-
- index_ptr = (long *) malloc(num_index * sizeof(long)); /* V1.2 */
-
- len = 0;/* index ptr is an array containing the subscripts*/
-
- while( len <= num_index -1 )
- {
- *(index_ptr + len ) = *(int4_ptr + len) - 1;
- len++;/* - 1 because internally the matrix starts at 0 */
- }
-
-
- /* free the allocated spaces for the NRV variable values */
-
- len = 0;
-
- while(len <= num_index - 1)
- {
- free(int4_ptr + len);
- len++;
- }
-
- len = 0;
- while(*(c_ptr + len) != NULL )
- {
- dummy_ptr = (char *) *(c_ptr + len);
- free(dummy_ptr);
- len++;
- }
-
- cfree(c_ptr);
- c_ptr = NULL;
- free(str_ptr);
- str_ptr = NULL;
- buff = strchr(buff, '=');/* look for the = */
-
- if (buff == 0)
- {
- buff = ProcessWrapLines(file_ptr, obuffer,
- "\nINCORRECT NRV DATA SPECIFICATION\n");
-
- if(*buff != '=')
- {
- if (mLog) {
- fprintf(stderr, "\nINCORRECT NRV DATA SPECIFICATION\n");
- fprintf(stderr,"%s\n",obuffer);
- }
- DeleteCDF(id);
- ExitBAD;
- }
- }
-
- buff++;/* get past the = */
-
- buff = TrimBlanks(buff);
-
- switch(*buff)
- {
- case '!':
- {
- buff = ProcessWrapLines(file_ptr, obuffer,
- "\nINCORRECTLY SPECIFIED NRV DATA VALUE\n");
- }
- break;
- case '\0':
- {
- buff = ProcessWrapLines(file_ptr, obuffer,
- "\nINCORRECTLY SPECIFIED NRV DATA VALUE\n");
- }
- break;
- default:
- break;
- }/* end switch */
- /*****************************/
- if((cdf_data_type == CDF_CHAR)||(cdf_data_type == CDF_UCHAR))
- {
- if(*buff != '{')
- {
- if (mLog) {
- fprintf(stderr, "\nINCORRECTLY SPECIFIED NRV DATA VALUE\n");
- fprintf(stderr,"%s\n",obuffer);
- }
- DeleteCDF(id);
- ExitBAD;
- }
-
- buff++;
-
- buff = TrimBlanks(buff);
-
-
- if((*buff == '\0')||(*buff == '!'))
- buff = ProcessWrapLines(file_ptr, obuffer,
- "\nINCORRECTLY SPECIFIED NRV DATA VALUE\n");
-
- str_ptr = NULL;
- ParseValue(file_ptr, buff, *buff,
- "\nINCORRECTLY SPECIFIED NRV DATA VALUE\n");
-
- c_ptr = (char **) calloc(2, sizeof(char *));
-
- len = strlen(str_ptr);
- /*printf("%s\n", str_ptr);*/
- *(c_ptr) = (char *) malloc(len + 6);
-
- strcpy(*c_ptr, str_ptr);/* copy it into 1 */
-
- dummy_ptr = (char *) *c_ptr;
-
- *(dummy_ptr + len) = '\0';
-
- *(c_ptr + 1) = NULL;
-
- }
- else if((cdf_data_type == CDF_EPOCH)&&(strchr(buff, ':')))
- {
- temp_addr = buff;/* start of the variable */
-
- len = StringTraverse(buff);
-
- buff = buff + len;/* get past the variable value */
-
- buff = TrimBlanks(buff);
-
- switch (*buff)
- {
- case '!':
- {
- if (mLog) {
- fprintf(stderr, "\nINCORRECTLY SPECIFIED NRV DATA VALUE\n");
- fprintf(stderr,"%s\n",obuffer);
- }
- DeleteCDF(id);
- ExitBAD;
- }
- break;
- case '\0':
- {
- if (mLog) {
- fprintf(stderr, "\nINCORRECTLY SPECIFIED NRV DATA VALUE\n");
- fprintf(stderr,"%s\n",obuffer);
- }
- DeleteCDF(id);
- ExitBAD;
- }
- break;
- default:
- break;
- }/* end switch */
-
-
- len = StringTraverse(buff);/* the second string */
- buff = buff + len;
-
- buff = TrimBlanks(buff);
-
- switch(*buff)
- {
- case '!':
- break;
- case '\0':
- break;
- default:
- {
- if (mLog) {
- fprintf(stderr, "\nINCORRECTLY SPECIFIED NRV DATA VALUE\n");
- fprintf(stderr,"%s\n",obuffer);
- }
- DeleteCDF(id);
- ExitBAD;
- }
- break;
- }/* end switch */
- buff--;/* get before it */
-
- len = buff - temp_addr + 1;/* lenghth of string to be copied */
-
- str_ptr = (char *) malloc(len + 1 + 6);/* copy it into str_ptr */
-
- strncpy(str_ptr, temp_addr, len);
-
- *(str_ptr + len) = '\0';
-
- c_ptr = (char **) calloc(2, sizeof( char *));/* 2 pointers */
-
- *(c_ptr) = (char *) malloc(len + 6);
-
- strcpy(*c_ptr, str_ptr);/* copy it into 1 */
-
- dummy_ptr = (char *) *c_ptr;
-
- *(dummy_ptr + len) = '\0';
-
- *(c_ptr + 1) = NULL;
- }
- else
- {
- temp_addr = buff;/* start of the variable */
-
- len = StringTraverse(buff);
-
- buff = buff + len;/* get past the variable value */
-
- buff = TrimBlanks(buff);
-
- switch(*buff)
- {
- case '!':
- break;
- case '\0':
- break;
- default:
- {
- if (mLog) {
- fprintf(stderr, "\nINCORRECTLY SPECIFIED NRV DATA VALUE\n");
- fprintf(stderr,"%s\n",obuffer);
- }
- DeleteCDF(id);
- ExitBAD;
- }
- break;
- }/* end switch */
- buff--;/* get to the previous char */
-
- len = buff - temp_addr + 1;/* lenghth of string to be copied */
-
- str_ptr = (char *) malloc(len + 1 + 6);/* copy it into str_ptr */
-
- strncpy(str_ptr, temp_addr, len);
-
- *(str_ptr + len) = '\0';
-
- c_ptr = (char **) calloc(2, sizeof( char *));/* 2 pointers */
-
- *(c_ptr) = (char *) malloc(len + 6);
-
- strcpy(*c_ptr, str_ptr);/* copy it into 1 */
-
- dummy_ptr = (char *) *c_ptr;
-
- *(dummy_ptr + len) = '\0';
-
- *(c_ptr + 1) = NULL;
-
- }/* end else */
- /****************************/
-
- if((cdf_data_type == CDF_CHAR)||(cdf_data_type == CDF_UCHAR))
- {
- /* V1.3 */
- /* assumption - no ! terminates the nrv data - only '\0' */
- /* padd the nrv value with blanks */
- if(strlen(str_ptr) <= str_len)
- {
- if(strlen(str_ptr) < str_len)
- {
- diff = str_len - strlen(str_ptr);
- temp_ptr = (char *)malloc(str_len + 1);
- strcpy(temp_ptr, str_ptr);
-
- offset = strlen(str_ptr);
-
- while(diff != 0)
- {
- *(temp_ptr + offset) = ' ';
- diff--;
- offset++;
- }
-
- *(temp_ptr + (str_len + 1)) = '\0';
-
- free(str_ptr);
-
- str_ptr = (char *)malloc(str_len + 1 +6);
- strcpy(str_ptr, temp_ptr);
- *(str_ptr + (str_len + 1)) = '\0';
- free(temp_ptr);
- }
- status = CDFvarPut(id, cdf_var_num, (long) 0,index_ptr,
- str_ptr );
- }
- else
- {
- if (mLog) {
- fprintf(stderr, "\nSTRING SIZE AND NRV VALUE DON'T MATCH\n");
- fprintf(stderr, "NRV VALUE TRUNCATED\n");
- }
- status = CDFvarPut(id, cdf_var_num, (long) 0,index_ptr,
- str_ptr );
- }
- }
- else
- {
- if(!strncmp(var_name,"EPOCH",5))/* V 1.4 */
- TypeConvertString(1); /* only one value - epoch*/
- else
- TypeConvertString(1); /* only one value non epoch */
-
- /*len = 0;
- while(len <= num_index - 1)
- {
- printf("index %ld\n", *(index_ptr + len));
- len++;
- }*/
-
- switch(cdf_data_type)
- {
- case CDF_INT1:
- {
- status = CDFvarPut(id, cdf_var_num, (long) 0,index_ptr,
- int1_ptr);
-
- free(int1_ptr);
- }
- break;
- case CDF_INT2:
- {
- status = CDFvarPut(id, cdf_var_num, (long) 0,index_ptr,
- int2_ptr);
- free(int2_ptr);
- }
- break;
- case CDF_INT4:
- {
- status = CDFvarPut(id, cdf_var_num, (long) 0,index_ptr,
- int4_ptr);
-
- free(int4_ptr);
- }
- break;
- case CDF_UINT1:
- {
- status = CDFvarPut(id, cdf_var_num, (long) 0,index_ptr,
- uint1_ptr);
-
- free(uint1_ptr);
- }
- break;
- case CDF_UINT2:
- {
- status = CDFvarPut(id, cdf_var_num, (long) 0,index_ptr,
- uint2_ptr);
-
- free(uint2_ptr);
- }
- break;
- case CDF_UINT4:
- {
- status = CDFvarPut(id, cdf_var_num, (long) 0,index_ptr,
- uint4_ptr);
-
- free(uint4_ptr);
- }
- break;
- case CDF_REAL4:
- {
- status = CDFvarPut(id, cdf_var_num, (long) 0,index_ptr,
- real4_ptr);
-
- free(real4_ptr);
- }
- break;
- case CDF_REAL8:
- {
- status = CDFvarPut(id, cdf_var_num, (long) 0,index_ptr,
- real8_ptr);
- /*printf("%e\n", *real8_ptr);*/
- free(real8_ptr);
- }
- break;
- case CDF_EPOCH: /* V1.1... */
- {
- status = CDFvarPut(id, cdf_var_num, (long) 0,index_ptr,
- real8_ptr);
- free(real8_ptr);
- }
- break; /* ...V1.1 */
- case CDF_BYTE:
- {
- status = CDFvarPut(id, cdf_var_num, (long) 0,index_ptr,
- int1_ptr);
-
- free(int1_ptr);
- }
- break;
- case CDF_FLOAT:
- {
- status = CDFvarPut(id, cdf_var_num, (long) 0,index_ptr,
- real4_ptr);
-
- free(real4_ptr);
- }
- break;
- case CDF_DOUBLE:
- {
- status = CDFvarPut(id, cdf_var_num, (long) 0,index_ptr,
- real8_ptr);
-
- free(real8_ptr);
- }
- break;
-
- }/* end switch */
- }/* end else */
- StatusHandler (status);
-
- len = 0;
- while( *(c_ptr + len) != NULL)
- {
- dummy_ptr = (char *) *(c_ptr +len);
- free(dummy_ptr);
- len++;
- }
-
- cfree(c_ptr);
-
- c_ptr = NULL;
-
- free(str_ptr);
-
- str_ptr = NULL;
- free(index_ptr);
- count++;
- }/* end while */
- }
-
-
- /*----------------------------------------------------------------*/
-
- void ReadNRVFile(num_values, numdims, var_name, str_len)
- long num_values;
- long numdims;
- char *var_name;
- long str_len;/* the string size of the variable */
- {
-
- FILE *nfp;
- long offset, diff;
- long count = 0, len, flag, i_flag;
- char *buff, *dummy_ptr, *temp_addr,
- *nrv_fname, *temp_ptr;
-
- long num_index, var_data_type, *index_ptr;
-
- len = strlen(sname) + strlen(".nrv_data"); /* V1.1... */
-
- nrv_fname = (char *) malloc (len + 1); /* +1 for NUL */
- strcpy(nrv_fname,sname);
-
- /* *(nrv_fname + strlen(sname)); */
-
- strcat(nrv_fname,".nrv");
-
- /* *(nrv_fname + len) = '\0'; */
-
- nfp = fopen(nrv_fname, "r");
- if (nfp == NULL) {
- strcpy (nrv_fname, sname);
- strcat (nrv_fname, ".nrv_data");
- nfp = fopen (nrv_fname, "r");
- if (nfp == NULL) return; /* no nrv file - go to next variable */
- } /* ...V1.1 */
-
- while(!feof(nfp))/* until eof */
- {
- flag = 0;
-
- while((flag != 1)&&(feof(nfp)!=1))/* alos tests if end of f is reached*/
- {
- fgets(obuffer,134, nfp);
-
- len = strlen(obuffer);
- *(obuffer + (len -1)) = '\0';
- buff = TrimBlanks(obuffer);
-
- if(*buff == '\0')
- {
- }
- else if (*buff == '!')
- {
- }
- else if (*buff == '[')
- {
- }
- else if (*buff == '=')
- {
- }
- else if (IsDelimString(buff) == 0)
- {
- /*printf("delim %s\n", buff);*/
- }
- else/* get out of the loop only if the same var name is found */
- {
- buff = ParseDString(buff, *buff);
-
- if(strcmp(str_ptr,var_name)==0)
- {
- /*printf("match made for the var %s\n", var_name);*/
- flag++;
- free(str_ptr);
- str_ptr = NULL;
-
- count = 0;
-
- while(count < num_values)
- {
-
- i_flag = 0;
-
- while(i_flag != 1)
- {
-
- if(fgets(obuffer,134, nfp) == NULL)
- {
- if (mLog) fprintf(stderr,
- "\nINCORRECTLY SPECIFIED INDICE FOR NRV DATA\n");
- DeleteCDF(id);
- ExitBAD;
- }
-
- len = strlen(obuffer);
- *(obuffer + (len -1)) = '\0';
-
- buff = TrimBlanks(obuffer);
-
- switch(*buff)
- {
- case '!':
- break;
- case '\0':
- break;
- default:
- i_flag++;
- break;
- }/* end switch */
-
- }/* end while */
-
- if(*buff != '[')
- {
- if (mLog) {
- fprintf(stderr,"\nINCORRECTLY SPECIFIED INDICE FOR NRV DATA\n");
- fprintf(stderr,"%s\n",obuffer);
- }
- ExitBAD;
- }
-
- buff++;/* move past the [ */
-
- buff = TrimBlanks(buff);
-
-
- if((*buff == '\0')||(*buff == '!'))
- buff = ProcessWrapLines(nfp, obuffer,
- "\nINCORRECTLY SPECIFIED INDICE FOR NRV DATA\n");
-
- ParseNumericValue(nfp, buff, ']',
- "\nINCORRECTLY SPECIFIED INDICE FOR NRV DATA\n");/* loaded in str_ptr */
- /*printf("%s\n", str_ptr);*/
-
- if(!numdims && !strlen(str_ptr))
- {
- free(str_ptr);
- str_ptr = (char *) malloc(2);/* one for a value one for \0 */
- strcpy(str_ptr, "0");
- num_index = ProcessNumericString();
- num_index--;/* was 1 now 0 */
- }
- else
- {
- num_index = ProcessNumericString();
-
- if(num_index != numdims)
- {
- if (mLog) fprintf(stderr,
- "\nINCORRECTLY SPECIFIED INDICE FOR NRV DATA\n");
- DeleteCDF(id);
- ExitBAD;
- }
- }
-
- var_data_type = cdf_data_type;/* copy the current type*/
- cdf_data_type = CDF_INT4;/* for the array indexes */
-
- TypeConvertString(num_index); /* int4_ptr has it *//* V1.3 */
-
- cdf_data_type = var_data_type;
-
- index_ptr = (long *) malloc(num_index * sizeof(long)); /* V1.2 */
-
- len = 0;/* index ptr is an array containing the subscripts*/
-
- while( len <= num_index -1 )
- {
- *(index_ptr + len ) = *(int4_ptr + len) - 1;
- len++;/* - 1 because internally the matrix starts at 0 */
- }
-
- /* free the allocated spaces for the NRV variable values */
-
- len = 0;
-
- while(len <= num_index - 1)
- {
- free(int4_ptr + len);
- len++;
- }
-
- len = 0;
- while(*(c_ptr + len) != NULL )
- {
- dummy_ptr = (char *) *(c_ptr + len);
- free(dummy_ptr);
- len++;
- }
-
- cfree(c_ptr);
- c_ptr = NULL;
- free(str_ptr);
- str_ptr = NULL;
-
- buff = strchr(buff, '=');/* look for the = */
- if (buff == 0)
- {
-
- buff = ProcessWrapLines(nfp, obuffer,
- "\nINCORRECT NRV DATA SPECIFICATION\n");
-
- if(*buff != '=')
- {
- if (mLog) {
- fprintf(stderr, "\nINCORRECT NRV DATA SPECIFICATION\n");
- fprintf(stderr,"%s\n",obuffer);
- }
- DeleteCDF(id);
- ExitBAD;
- }
- }
-
- buff++;/* get past the = */
-
- buff = TrimBlanks(buff);
-
- switch(*buff)
- {
- case '!':
- {
- buff = ProcessWrapLines(nfp, obuffer,
- "\nINCORRECTLY SPECIFIED NRV DATA VALUE\n");
- }
- break;
- case '\0':
- {
- buff = ProcessWrapLines(nfp, obuffer,
- "\nINCORRECTLY SPECIFIED NRV DATA VALUE\n");
- }
- break;
- default:
- break;
- }/* end switch */
-
- /*****************************/
- if((cdf_data_type == CDF_CHAR)||(cdf_data_type == CDF_UCHAR))
- {
- if(*buff != '{')
- {
- if (mLog) {
- fprintf(stderr, "\nINCORRECTLY SPECIFIED NRV DATA VALUE\n");
- fprintf(stderr,"%s\n",obuffer);
- }
- DeleteCDF(id);
- ExitBAD;
- }
-
- buff++;
-
- buff = TrimBlanks(buff);
-
-
- if((*buff == '\0')||(*buff == '!'))
- buff = ProcessWrapLines(nfp, obuffer,
- "\nINCORRECTLY SPECIFIED NRV DATA VALUE\n");
-
- str_ptr = NULL;
- ParseValue(nfp, buff, *buff,
- "\nINCORRECTLY SPECIFIED NRV DATA VALUE\n");
-
- c_ptr = (char **) calloc(2, sizeof(char *));
-
- len = strlen(str_ptr);
- /*printf("%s\n", str_ptr);*/
- *(c_ptr) = (char *) malloc(len + 6);
-
- strcpy(*c_ptr, str_ptr);/* copy it into 1 */
-
- dummy_ptr = (char *) *c_ptr;
-
- *(dummy_ptr + len) = '\0';
-
- *(c_ptr + 1) = NULL;
-
- }
- else if((cdf_data_type == CDF_EPOCH)&&(strchr(buff, ':')))
- {
- temp_addr = buff;/* start of the variable */
-
- len = StringTraverse(buff);
-
- buff = buff + len;/* get past the variable value */
-
- buff = TrimBlanks(buff);
-
- switch (*buff)
- {
- case '!':
- {
- if (mLog) {
- fprintf(stderr, "\nINCORRECTLY SPECIFIED NRV DATA VALUE\n");
- fprintf(stderr,"%s\n",obuffer);
- }
- DeleteCDF(id);
- ExitBAD;
- }
- break;
- case '\0':
- {
- if (mLog) {
- fprintf(stderr, "\nINCORRECTLY SPECIFIED NRV DATA VALUE\n");
- fprintf(stderr,"%s\n",obuffer);
- }
- DeleteCDF(id);
- ExitBAD;
- }
- break;
- default:
- break;
- }/* end switch */
-
-
- len = StringTraverse(buff);/* the second string */
- buff = buff + len;
-
- buff = TrimBlanks(buff);
-
- switch(*buff)
- {
- case '!':
- break;
- case '\0':
- break;
- default:
- {
- if (mLog) {
- fprintf(stderr, "\nINCORRECTLY SPECIFIED NRV DATA VALUE\n");
- fprintf(stderr,"%s\n",obuffer);
- }
- DeleteCDF(id);
- ExitBAD;
- }
- break;
- }/* end switch */
- buff--;/* get before it */
-
- len = buff - temp_addr + 1;/* lenghth of string to be copied */
-
- str_ptr = (char *) malloc(len + 1 + 6);/* copy it into str_ptr */
-
- strncpy(str_ptr, temp_addr, len);
-
- *(str_ptr + len) = '\0';
-
- c_ptr = (char **) calloc(2, sizeof( char *));/* 2 pointers */
-
- *(c_ptr) = (char *) malloc(len + 6);
-
- strcpy(*c_ptr, str_ptr);/* copy it into 1 */
-
- dummy_ptr = (char *) *c_ptr;
-
- *(dummy_ptr + len) = '\0';
-
- *(c_ptr + 1) = NULL;
- }
- else
- {
- temp_addr = buff;/* start of the variable */
-
- len = StringTraverse(buff);
-
- buff = buff + len;/* get past the variable value */
-
- buff = TrimBlanks(buff);
-
- switch(*buff)
- {
- case '!':
- break;
- case '\0':
- break;
- default:
- {
- if (mLog) {
- fprintf(stderr, "\nINCORRECTLY SPECIFIED NRV DATA VALUE\n");
- fprintf(stderr,"%s\n",obuffer);
- }
- DeleteCDF(id);
- ExitBAD;
- }
- break;
- }/* end switch */
- buff--;/* get to the previous char */
-
- len = buff - temp_addr + 1;/* lenghth of string to be copied */
-
- str_ptr = (char *) malloc(len + 1 + 6);/* copy it into str_ptr */
-
- strncpy(str_ptr, temp_addr, len);
-
- *(str_ptr + len) = '\0';
-
- c_ptr = (char **) calloc(2, sizeof( char *));/* 2 pointers */
-
- *(c_ptr) = (char *) malloc(len + 6);
-
- strcpy(*c_ptr, str_ptr);/* copy it into 1 */
-
- dummy_ptr = (char *) *c_ptr;
-
- *(dummy_ptr + len) = '\0';
-
- *(c_ptr + 1) = NULL;
-
- }/* end else */
- /****************************/
-
-
- if((cdf_data_type == CDF_CHAR)||(cdf_data_type == CDF_UCHAR))
- {
- /*printf("%s\n", str_ptr);*/
-
- /* V1.3 */
-
- /* assumption - no ! terminates the nrv data - only '\0' */
- if(strlen(str_ptr) <= str_len)
- {
- if(strlen(str_ptr) < str_len)
- {
- diff = str_len - strlen(str_ptr);
- temp_ptr = (char *)malloc(str_len + 1 + 6);
- strcpy(temp_ptr, str_ptr);
-
- offset = strlen(str_ptr);
-
- while(diff != 0)
- {
- *(temp_ptr + offset) = ' ';
- diff--;
- offset++;
- }
-
- *(temp_ptr + (str_len + 1)) = '\0';
-
- free(str_ptr);
-
- str_ptr = (char *)malloc(str_len + 1 + 6);
- strcpy(str_ptr, temp_ptr);
- *(str_ptr + (str_len + 1)) = '\0';
- free(temp_ptr);
- }
- status = CDFvarPut(id, cdf_var_num, (long) 0,index_ptr,
- str_ptr );
- }
- else
- {
- if (mLog) {
- fprintf(stderr, "\nSTRING SIZE AND NRV VALUE DON'T MATCH\n");
- fprintf(stderr, "NRV VALUE TRUNCATED\n");
- }
- status = CDFvarPut(id, cdf_var_num, (long) 0,index_ptr,
- str_ptr );
- }
- }
- else
- {
-
- if(!strncmp(var_name,"EPOCH",5))/* V 1.4 */
- TypeConvertString(1); /* only one value */
- else
- TypeConvertString(1); /* only one value non epoch */
-
-
-
- len = 0;
- while(len <= num_index - 1)
- {
- /*printf("index %ld\n", *(index_ptr + len));*/
- len++;
- }
- switch(cdf_data_type)
- {
- case CDF_INT1:
- {
- status = CDFvarPut(id, cdf_var_num, (long) 0,index_ptr,
- int1_ptr);
-
- free(int1_ptr);
- }
- break;
- case CDF_INT2:
- {
- status = CDFvarPut(id, cdf_var_num, (long) 0,index_ptr,
- int2_ptr);
-
- free(int2_ptr);
- }
- break;
- case CDF_INT4:
- {
- status = CDFvarPut(id, cdf_var_num, (long) 0,index_ptr,
- int4_ptr);
-
- free(int4_ptr);
- }
- break;
- case CDF_UINT1:
- {
- status = CDFvarPut(id, cdf_var_num, (long) 0,index_ptr,
- uint1_ptr);
-
- free(uint1_ptr);
- }
- break;
- case CDF_UINT2:
- {
- status = CDFvarPut(id, cdf_var_num, (long) 0,index_ptr,
- uint2_ptr);
-
- free(uint2_ptr);
- }
- break;
- case CDF_UINT4:
- {
- status = CDFvarPut(id, cdf_var_num, (long) 0,index_ptr,
- uint4_ptr);
-
- free(uint4_ptr);
- }
- break;
- case CDF_REAL4:
- {
- status = CDFvarPut(id, cdf_var_num, (long) 0,index_ptr,
- real4_ptr);
-
- free(real4_ptr);
- }
- break;
- case CDF_REAL8:
- {
- status = CDFvarPut(id, cdf_var_num, (long) 0,index_ptr,
- real8_ptr);
- /*printf("%e\n", *real8_ptr);*/
- free(real8_ptr);
- }
- break;
- case CDF_EPOCH: /* V1.1... */
- {
- status = CDFvarPut(id, cdf_var_num, (long) 0,index_ptr,
- real8_ptr);
- free(real8_ptr);
- }
- break; /* ...V1.1 */
- case CDF_BYTE:
- {
- status = CDFvarPut(id, cdf_var_num, (long) 0,index_ptr,
- int1_ptr);
-
- free(int1_ptr);
- }
- break;
- case CDF_FLOAT:
- {
- status = CDFvarPut(id, cdf_var_num, (long) 0,index_ptr,
- real4_ptr);
-
- free(real4_ptr);
- }
- break;
- case CDF_DOUBLE:
- {
- status = CDFvarPut(id, cdf_var_num, (long) 0,index_ptr,
- real8_ptr);
-
- free(real8_ptr);
- }
- break;
-
- }/* end switch */
- }/* end else */
- StatusHandler (status);
-
- len = 0;
- while( *(c_ptr + len) != NULL)
- {
- dummy_ptr = (char *) *( c_ptr +len);
- free(dummy_ptr);
- len++;
- }
-
- cfree(c_ptr);
-
- c_ptr = NULL;
-
- free(str_ptr);
-
- str_ptr = NULL;
- free(index_ptr);
- count++;
- }/* end while */
-
-
- }
- else
- {
- free(str_ptr);
- str_ptr = NULL;
- }
-
- }/* end default */
- }/* end while */
-
- }/* end while */
-
-
- fclose(nfp);/* close the file after reaching the end */
- free(nrv_fname);
-
- }
-
-
-
-
- /*-----------------------------------------------------------------*/
-
- char *TrimBlanks(aaddr)
- char aaddr[];/* returns a non white space char/ eo string */
- {
- char *addr;
- addr = aaddr;
- while (*addr != '\0')
- {
- switch(*addr)
- {
- case ' ':
- addr++;
- break;
- case '\t':
- addr++;
- break;
- default:
- return(addr);
- /* break; */ /* Unreachable. */
- }
- }
- return(addr);
- }
-
- /*-------------------------------------------------------------------------*/
-
- int StringTraverse(aaddr)
- char aaddr[];/* returns the length of the string */
- {
- char *temp_add, *addr;
- long len;
-
- addr = aaddr;/* for pointer manipulation */
-
- temp_add = addr;/* to note the initial position */
-
- while((*addr != ' ')&&(*addr != '!')&&(*addr != '\t')&&(*addr != '\0'))
- addr++;
-
-
- len = addr-temp_add;
- return(len);
- }
-
- /*--------------------------------------------------------------------------*/
-
- long GetValue(buff, dummy)
- char buff[];/* copies the characters after allocating space*/
- char dummy[];
- {
- long ret = 0, len;
-
-
- if((*buff == '!')||(*buff == '\0'))
- return(ret++);/* incase comment or end of string */
-
- len = StringTraverse(buff);/* till white space or '\0' */
-
- strncpy(dummy, buff, len);
- *(dummy + len) = '\0';
-
- return(ret);
- }
-
- /*-----------------------------------------------------------------*/
-
- char *ParseDataType(buff, dummy)
- char buff[];/* */
- char dummy[];/* returns the pointer at the following cases */
- {
-
- long flag = 0;
- char *temp_addr;
-
- temp_addr = buff;
- strcpy(dummy," ");
-
-
- while(flag ==0)/* to look till any of the below is encountered */
- {
- switch(*buff)
- {
- case ' ':
- {
- strncpy(dummy, temp_addr, buff-temp_addr);
- *(dummy + (buff-temp_addr)) = '\0';
- flag++;
- }
- break;
- case '{':
- {
- strncpy(dummy, temp_addr, buff-temp_addr);
- *(dummy + (buff-temp_addr)) = '\0';
- flag++;
- }
- break;
- case '\t':
- {
- strncpy(dummy, temp_addr, buff-temp_addr );
- *(dummy + (buff-temp_addr)) = '\0';
- flag++;
- }
- break;
- case '!':
- {
- strncpy(dummy, temp_addr, buff-temp_addr );
- *(dummy + (buff-temp_addr)) = '\0';
- flag++;
- }
- break;
- case '\0':
- {
- strncpy(dummy, temp_addr, buff-temp_addr );
- *(dummy + (buff-temp_addr)) = '\0';
- flag++;
- }
- break;
- default:
- buff++;
- break;
- }/* end switch */
- }/* end while */
- return(buff);
- }
-
- /*------------------------------------------------------------------*/
-
- long AnalyseDataType(data_type)
- char data_type[];
- {
- long len;
-
- strupper(data_type);
- len = strlen(data_type);
- *(data_type + (len+1)) = '\0';
-
- if(strcmp(data_type,"CDF_INT1")==0)
- cdf_data_type = CDF_INT1;
- else if (strcmp(data_type,"CDF_INT2")==0)
- cdf_data_type = CDF_INT2;
- else if (strcmp(data_type,"CDF_INT4")==0)
- cdf_data_type = CDF_INT4;
- else if (strcmp(data_type,"CDF_UINT1")==0)
- cdf_data_type = CDF_UINT1;
- else if (strcmp(data_type,"CDF_UINT2")==0)
- cdf_data_type = CDF_UINT2;
- else if (strcmp(data_type,"CDF_UINT4")==0)
- cdf_data_type = CDF_UINT4;
- else if (strcmp(data_type,"CDF_REAL4")==0)
- cdf_data_type = CDF_REAL4;
- else if (strcmp(data_type,"CDF_REAL8")==0)
- cdf_data_type = CDF_REAL8;
- else if (strcmp(data_type,"CDF_CHAR")==0)
- cdf_data_type = CDF_CHAR;
- else if (strcmp(data_type,"CDF_UCHAR")==0)
- cdf_data_type = CDF_UCHAR;
- else if (strcmp(data_type,"CDF_BYTE")==0)
- cdf_data_type = CDF_BYTE;
- else if (strcmp(data_type,"CDF_FLOAT")==0)
- cdf_data_type = CDF_FLOAT;
- else if (strcmp(data_type,"CDF_DOUBLE")==0)
- cdf_data_type = CDF_DOUBLE;
- else if (strcmp(data_type,"CDF_EPOCH")==0)
- cdf_data_type = CDF_EPOCH;
- else
- {
- if (mLog) fprintf(stderr, "Unrecognized Data Type: %s\n", data_type );
- DeleteCDF(id);/* assumes that the id is a global var*/
- ExitBAD;
- }
- return(cdf_data_type);
- }
-
- /*-------------------------------------------------------------------*/
-
- int ParseValue(fp, buffer, delim, mess)
- FILE *fp;
- char buffer[];/* buffer starting with the delim */
- char delim;
- char mess[];/* the error message */
- {
- char *temp_addr, *temp_ptr, *buff;
- long dum, hdr_flag , len;
-
-
- /*strcpy(lbuffer, buffer);*//* for error messages */
-
- buffer++;/* get past the delimiter */
-
- if(*buffer == '\0')
- {
- if (mLog) {
- fprintf(stderr, "%s\n", mess);
- fprintf(stderr,"%s\n", obuffer);
- }
- DeleteCDF(id);/* assumes that the id is a global var*/
- ExitBAD;
- }
-
- temp_addr = buffer;
-
- buffer = ValueTraverse(buffer, delim);/* get to the end dilimiter */
-
- switch(*buffer)
- {
- case '\0':/* in case no delimiter is found at the end */
- {
- if (mLog) {
- fprintf(stderr,"%s\n", mess);
- fprintf(stderr, "%s\n",obuffer);
- }
- DeleteCDF(id);/* assumes that the id is a global var*/
- ExitBAD;
- }
- break;
- default:
- {
- if(str_ptr == NULL)
- {
-
- str_ptr = (char *) malloc(buffer-temp_addr + 2);
- /* create space for value
- excluding the delimiter */
- strncpy(str_ptr, temp_addr, buffer-temp_addr);
- *(str_ptr + (buffer-temp_addr)) = '\0';
- }
- else
- {
- /*temp_ptr = str_ptr;*/
-
- temp_ptr = (char *) malloc(strlen(str_ptr) + 1 + 1);
-
- strcpy(temp_ptr, str_ptr);
- *(temp_ptr + strlen(str_ptr)) = '\0';
- free(str_ptr);
-
- str_ptr = (char *)malloc(strlen(temp_ptr) + buffer-temp_addr + 1);
-
- strcpy(str_ptr, temp_ptr);
- strncat(str_ptr, temp_addr, buffer-temp_addr);
- *(str_ptr + strlen(temp_ptr) + (buffer-temp_addr)) = '\0';
- free(temp_ptr);
- }
- ++buffer;/* get past the delimiter */
-
- buffer = TrimBlanks(buffer);
-
- if((*buffer == '\0')||(*buffer == '!'))
- {
- buffer = ProcessWrapLines( fp, obuffer,
- mess);/* */
-
- if(*buffer != '}')
- {
- if (mLog) {
- fprintf(stderr,"%s\n", mess);
- fprintf(stderr, "%s\n", obuffer );
- }
- DeleteCDF(id);/* assumes that the id is a global var*/
- ExitBAD;
- }
- }
-
- switch(*buffer)/* assume that a dash follows a delimiter */
- {
- case '\0':
- {
- if (mLog) {
- fprintf(stderr,"%s\n", mess);
- fprintf(stderr, "%s\n", obuffer );
- }
- DeleteCDF(id);/* assumes that the id is a global var*/
- ExitBAD;
- }
- break;
- case '}':
- {
- ++buffer;/* get past the brace */
- buffer = TrimBlanks(buffer);
-
- switch(*buffer)/* char after the brace */
- {
- case '.':/* new attribute next */
- {
- buffer++;
-
- buffer = TrimBlanks(buffer);/* get past the ; */
-
- switch(*buffer)
- {
- case '!':
- {
- dum = 1;
- return(dum);/* return at end delimiter */
- }
-
- case '\0':
- {
- dum = 1;
- return(dum);/* return at end delimiter */
- }
-
- default:
- {
- if (mLog) {
- fprintf(stderr, "%s\n", mess);
- fprintf(stderr, "%s\n", obuffer);
- }
- DeleteCDF(id);/* assumes that the id is a global var*/
- ExitBAD;
- }
- break;
- }/* end switch */
- }
- break;
- case '!':/* have to search next lines */
- {
- dum = 0;
- return(dum);
- }
-
- case '\0':
- {
- dum = 0;
- return(dum);
- }
-
- default:/* unrecognizable character found after } */
- {
- if (mLog) {
- fprintf(stderr, "%s\n", mess);
- fprintf(stderr, "%s\n", obuffer);
- }
- DeleteCDF(id);/* assumes that the id is a global var*/
- ExitBAD;
- }
- break;
- }/* end switch */
- }
- break;
- case '-':
- {
- ++buffer;/* get past the - */
- buffer = TrimBlanks(buffer);
- switch(*buffer)
- {
- case '\0':/* continue in the next line */
- {
- hdr_flag = 0;
- while(hdr_flag != 1)
- {
- if(fgets(obuffer, 134, fp)==NULL)
- {
- if (mLog) fprintf(stderr,"%s\n", mess);
- DeleteCDF(id);/* assumes that the id is a global var*/
- ExitBAD;
- }
- len = strlen(obuffer);
- obuffer[len-1] = '\0';
- buff = TrimBlanks(obuffer);
-
- switch (*buff)
- {
- case '\0':
- break;
- case '!':
- break;
- default:
- hdr_flag++;
- break;
- }/* end switch */
- }/* end while */
- dum = ParseValue(fp, buff, *buff, mess);
- }
- break;
- case '!':/* continue in the next line */
- {
- hdr_flag = 0;
- while(hdr_flag != 1)
- {
- if(fgets(obuffer, 134, fp)==NULL)
- {
- if (mLog) fprintf(stderr,"%s\n", mess);
- DeleteCDF(id);/* assumes that the id is a global var*/
- ExitBAD;
- }
- len = strlen(obuffer);
- obuffer[len-1] = '\0';
- buff = TrimBlanks(obuffer);
-
- switch (*buff)
- {
- case '\0':
- break;
- case '!':
- break;
- default:
- hdr_flag++;
- break;
- }/* end switch */
- }/* end while */
- dum = ParseValue(fp, buff, *buff, mess);
- }
- break;
- default:
- {
- if (mLog) {
- fprintf(stderr, "%s\n", mess);
- fprintf(stderr, "%s\n",obuffer);
- }
- DeleteCDF(id);/* assumes that the id is a global var*/
- ExitBAD;
- }
- break;
- }/* end switch */
- }
- break;
- default:
- {
- if (mLog) {
- fprintf(stderr, "%s\n", mess);
- fprintf(stderr, "%s\n", obuffer);
- }
- DeleteCDF(id);/* assumes that the id is a global var*/
- ExitBAD;
- }
- break;
- }/* end switch */
-
-
- }
- break;
- }/* end switch */
-
- return dum; /* I'm not sure what should be returned, J Love. */
- }
-
- /*-------------------------------------------------------------------*/
-
- char *ValueTraverse(addr, delim)
- char addr[];/* traverse the value till end of string , or the delim */
- char delim;
- {
-
-
-
- while((*addr != delim)&&(*addr != '\0'))
- addr++;
-
- return(addr);
-
- }
-
- /*------------------------------------------------------------------*/
-
- char *ParseDString(addr, delim)
- char addr[];/* address of the string starting at the delimiter */
- char delim;
- {
- char *temp_addr;
-
-
- temp_addr = addr;/* addr of 1 delimiter */
-
- addr++;/* move by one */
-
- while((*addr != delim)&&(*addr != '\0'))
- addr++;
-
- switch (*addr)
- {
- case '\0':
- {
- if (mLog) {
- fprintf(stderr,"%s\n", "INCORRECTLY DELIMITED STRING\n");
- fprintf(stderr, "%s\n", temp_addr);
- }
- DeleteCDF(id);/* assumes that the id is a global var*/
- ExitBAD;
- }
- break;
- default:
- {
- str_ptr = (char *)malloc((addr-1)-(temp_addr+1) + 2);/* space for
- the string without delimiters */
-
- strncpy(str_ptr, temp_addr + 1, (addr-temp_addr-1));
- *(str_ptr + (addr - temp_addr -1)) = '\0';
- }
- break;
- }/* end switch */
-
- return(addr);
- }
-
- /*-------------------------------------------------------------------*/
-
- int ParseNumericValue(fp,buff, termin, mess)
- /* starts at char after termin
- and goes on till term (} or ]) is reached*/
- /* this string is in str_ptr */
- FILE *fp;
- char buff[];/* a non white space - can't be a ! */
- char termin;/* the terminating char */
- /*char lbuffer[];*//* used in a special case for NRV*/
- char mess[];/* the error message */
- {
-
- char *temp_addr, *temp_ptr;/* lbuffer[134];*/
- long ret, flag, len, dummy;
-
- temp_addr = buff;
-
- buff = NumericValueTraverse(fp, buff, termin, &ret, obuffer, mess);
-
- /* returns the address of the last useful char of the string */
-
- if(str_ptr ==NULL)
- {
- str_ptr = (char *)malloc(buff-temp_addr+3);/* create space for value*/
-
- strncpy(str_ptr, temp_addr, buff-temp_addr+1);/* copy it */
-
- *(str_ptr + (buff-temp_addr + 1)) = '\0';
- }
- else
- {
- temp_ptr = (char *) malloc(strlen(str_ptr) + 3);
-
- strcpy(temp_ptr, str_ptr);
-
- *(temp_ptr + strlen(str_ptr)) = '\0';
-
- free(str_ptr);
-
- str_ptr = (char *)malloc(strlen(temp_ptr) + buff-temp_addr + 3);
-
- strcpy(str_ptr, temp_ptr);
- strncat(str_ptr, temp_addr, buff - temp_addr+1);
- *(str_ptr + (strlen(temp_ptr) + buff-temp_addr+1)) = '\0';
- free(temp_ptr);
-
- }
-
- switch(ret)
- {
- case 0:/* more seeks needed */
- {
- flag = 0;
- while(flag == 0)
- {
- if(fgets(obuffer, 134, fp) == NULL)
- {
- if (mLog) fprintf(stderr, "%s\n", mess);
- DeleteCDF(id);/* assumes that the id is a global var*/
- ExitBAD;
- }
-
- len = strlen(obuffer);
- *(obuffer + (len-1)) = '\0';
- buff = TrimBlanks(obuffer);
-
- switch (*buff)
- {
- case ' ':
- break;
- case '\0':
- break;
- case '!':
- break;
- default:
- flag++;
- break;
- }/* end switch */
- }/* end while */
-
- dummy = ParseNumericValue(fp,buff, termin, mess);
-
- }
- break;
- case 1:/*no more seeks but no . encountered*/
- {
- dummy = 0;
- return(dummy);
- }
-
- case 2:/* no more seeks and . encountered */
- {
- dummy = 1;
- return(dummy);
- }
- }/* end switch */
-
- return(dummy); /* I'm not sure what to return, J Love */
- }
-
- /*---------------------------------------------------------------------*/
-
- char *NumericValueTraverse(fp, buff, termin, ret, buffer, mess)
- FILE *fp;
- char buff[];/* given a nmeric string, goes on till the end useful char
- and returns it */
- char termin;
- long *ret;
- char buffer[];
- char mess[];
- {
-
- char *temp_addr, dbuffer[134];
- long flag, dummy;
- long c_flag = 0; /* J Love, 26-Feb-92 */
-
- flag = 0;
-
- while(flag != 1)
- {
- buff = TrimBlanks(buff);
-
- if(*buff == termin)/* either a } or a ] */
- {
- if(c_flag == 1)/* previous char encountered was a , */
- {
- if (mLog) {
- fprintf(stderr, "%s", mess);
- fprintf(stderr, "%s\n", buffer);
- }
- DeleteCDF(id);/* assumes that the id is a global var*/
- ExitBAD;
- }
- else
- {
- if(c_flag != -1)
- temp_addr = buff;
-
- temp_addr--;/* get before the }*/
- buff++;/* get past the } */
- buff = TrimBlanks(buff);
-
- switch(*buff)/* to check the char after the brace */
- {
- case '!':
- {
- dummy = 1;
- *ret = dummy;
- /*strcpy(buffer, dbuffer);*/
- return(temp_addr);
- }
-
- case '\0':
- {
- dummy = 1;
- *ret = dummy;
- /*strcpy(buffer, dbuffer);*/
- return(temp_addr);
- }
-
- case '.':
- {
- dummy = 2;
- *ret = dummy;
- /*strcpy(buffer, dbuffer);*/
- return(temp_addr);
- }
- default:
- {
- if(termin == '}')
- {
- if (mLog) {
- fprintf(stderr, "%s", mess);
- fprintf(stderr, "%s\n", buffer);
- }
- DeleteCDF(id);/* assumes that the id is a global var*/
- ExitBAD;
- }
- else/* if ] you can have char after */
- {
- dummy = 1;
- *ret = dummy;
- /*strcpy(buffer, dbuffer);*/
- return(temp_addr);
- }
- }
- break;
- }/* end switch */
- }/* end else */
- }/* end else if */
-
- else if(*buff == '!')
- {
- if(c_flag == 1)/* have to read the next line */
- {
- buff--;/* get before the ! */
- dummy = 0;
- *ret = dummy;
- return(buff);
- }
- else/* check if the next char is '{' */
- {
-
- temp_addr = buff;/* used at the next stage */
- buff = ProcessWrapLines( fp, dbuffer,mess);
-
-
- if(*buff != termin)/* unknown char */
- {
- if (mLog) {
- fprintf(stderr, "%s", mess);
- fprintf(stderr, "%s\n", buffer);
- }
- DeleteCDF(id);
- ExitBAD;
- }
-
- c_flag = -1;/* special value */
- }
- }/* end else if */
-
- else if (*buff == '\0')
- {
- if(c_flag == 1)/* have to read the next line */
- {
- buff--;/* get before the \0 */
- dummy = 0;
- *ret = dummy;
- return(buff);
- }
- else/* check if the next char is '{' */
- {
- temp_addr = buff;/* used at the next stage */
- buff = ProcessWrapLines(fp, dbuffer, mess);
-
- /* dbuffer is a dummy buffer used to prevent temp_address
- getting changed if buffer is used here */
-
- if(*buff != termin)/* unknown char */
- {
- if (mLog) {
- fprintf(stderr, "%s", mess);
- fprintf(stderr, "%s\n", buffer);
- }
- DeleteCDF(id);
- ExitBAD;
- }
-
- c_flag = -1;/* special value */
- }
- }/* end else if */
-
- else if (*buff == ',')
- {
- c_flag = 1;
- buff++;/* get past it */
- }/* end else if */
-
- else
- {
- buff++;/* get past the current char */
- c_flag = 0;/* means that last char encountered is not , */
- }
-
- }/* while */
-
- return NULL; /* Not sure what to return, J Love. */
- }
-
- /*---------------------------------------------------------------------*/
-
- long ProcessNumericString()
- {
- long num_commas;
-
- num_commas = CountCommas();
-
- c_ptr = (char **) calloc(num_commas+2, sizeof( char *));
- /* an array of ptrs */
-
- PlaceValues ();
-
- return(num_commas + 1);/* the number of values in the array */
-
- }
-
- /*------------------------------------------------------------------------*/
-
- long CountCommas()
- {
- char *buff;
- long num;
-
- buff = str_ptr;
-
- num = 0;
-
- while(*buff != '\0')
- {
- switch(*buff)
- {
- case ',':
- {
- num++;
- buff++;
- }
- break;
- default:
- buff++;
- break;
- }/* end switch */
- }/* end while */
-
- return(num);
- }
-
- /*---------------------------------------------------------------------*/
-
- void PlaceValues (/*number*/)
- /*long number;*/ /* number of values to be placed - includes the NULL at end */
- {
-
- char *buff, *temp_addr, *dummy;
- long index =0, flag;
-
- buff = str_ptr;
-
- temp_addr = str_ptr;
-
- flag = 0;
-
- while(flag == 0)
- {
-
- switch(*buff)/* already made sure that no ! in between ,, */
- {
- case ',':
- {
- if((buff-temp_addr) != 0)
- {
- *(c_ptr + index) = (char *) malloc(buff - temp_addr + 2);
-
- strncpy(*(c_ptr + index), temp_addr, buff - temp_addr);
- /* c_ptr[index] contains the pointer to the string */
-
- dummy = *(c_ptr + index);
-
- *(dummy + (buff-temp_addr)) = '\0';
-
- buff++;/* get past the , */
- buff = TrimBlanks(buff);
- temp_addr = buff;
- index++;
- }
- else
- {
- if (mLog) {
- fprintf(stderr,"\nINCORRECTLY SPECIFIED NUMERIC VALUE(S)");
- fprintf(stderr, "%s\n", str_ptr);
- }
- DeleteCDF(id);/* assumes that the id is a global var*/
- ExitBAD;
- }
- }
- break;
- case '\0':
- {
- if((buff-temp_addr) != 0)
- {
- *(c_ptr + index) = (char *) malloc(buff - temp_addr + 2);
-
- strncpy(*(c_ptr + index), temp_addr, buff - temp_addr);
- dummy = *(c_ptr + index);
-
- *(dummy + (buff-temp_addr)) = '\0';
-
- buff++;/* get past the , */
- buff = TrimBlanks(buff);
- temp_addr = buff;
- index++;
-
- flag++;/* exit out of the loop */
- }
- else
- {
- if (mLog) {
- fprintf(stderr,"INCORRECTLY SPECIFIED NUMERIC VALUES \n");
- fprintf(stderr, "%s\n", str_ptr);
- }
- DeleteCDF(id);/* assumes that the id is a global var*/
- ExitBAD;
- }
- }
- break;
- default:
- {
- buff++;
- }
- break;
- }/* end switch */
- }/* end while */
-
- *(c_ptr + index) = NULL; /** this is the last element of the ptr array */
- }
-
- /*-----------------------------------------------------------------*/
-
- void ParseVariances(fp,buff, var_array, buffer)
- /* parses the string and */
- FILE *fp;
- char buff[]; /* places values in a supplied array */
- long var_array[];
- char buffer[];
- {
- extern long num_dims;
- long index = 0;
- long flag = 0;
-
- while(flag != 1)
- {
- buff = TrimBlanks(buff);
-
- switch(*buff)
- {
- case '\0':
- {
- if((index) != (1 + num_dims))/* 1 for the record variance */
- {
- buff = ProcessWrapLines(fp, buffer,
- "INCORRECT VARIABLE SPECIFICATION\n");
- }
- else
- {
- flag++;
- }
- }
- break;
- case '!':
- {
- if((index) != ( 1 + num_dims))
- {
- buff = ProcessWrapLines(fp, buffer,
- "INCORRECT VARIABLE SPECIFICATION\n");
- }
- else
- flag++;
- }
- break;
- case '.':
- {
- if((index) != (1 + num_dims))/* 1 for the record variance */
- {
- if (mLog) {
- fprintf(stderr, "INCORRECT RECORD/DIMENSION VARIANCE \n");
- fprintf(stderr,"%s\n", buffer);
- }
- DeleteCDF(id);/* assumes that the id is a global var*/
- ExitBAD;
- }
- else
- {
- buff++;/* get past the . */
- buff = TrimBlanks(buff);
-
- if((*buff != '!')&&(*buff != '\0'))
- {
- if (mLog) {
- fprintf(stderr, "INCORRECT RECORD/DIMENSION VARIANCE \n");
- fprintf(stderr, "%s\n", buffer);
- }
- DeleteCDF(id);/* assumes that the id is a global var*/
- ExitBAD;
- }
-
- }/* end else */
- }
- break;
- default:
- {
- if((isalpha(*buff))&&(islower(*buff)))
- *buff = toupper(*buff);/* for standardisation */
-
- switch(*buff)
- {
- case 'T':
- {
- *(var_array + index) = -1;/* VARY */
- buff++;
- index++;
- }
- break;
- case 'F':
- {
- *(var_array + index) = 0;/* NOVARY */
- buff++;
- index++;
- }
- break;
- default:/* unrecognizable char */
- {
- if (mLog) {
- fprintf(stderr, "INCORRECT RECORD/DIMENSION VARIANCE \n");
- fprintf(stderr,"%s\n", buffer);
- }
- DeleteCDF(id);/* assumes that the id is a global var*/
- ExitBAD;
- }
- break;
- }/* end switch */
- }
- break;
- }/* end switch */
- }/* end while */
- }
-
- /*--------------------------------------------------------------------*/
-
- void TypeConvertString(NumValues /*, epoch_flag*/)/* converts the */
- /* array of strings into the appropriate type */
- long NumValues;/* number of string values in the array */
- /* long epoch_flag; */ /* 1 if epoch conversion is to be done 0 otherwise*/
- {
-
- char nchar, *s;
-
- unsigned char nuchar;
-
- short nshort;
- unsigned short nushort;
-
- long index = 0, test_val, i;
-
- float float_val;
- double double_val;
- struct EPOCH epoch;
-
-
- switch(cdf_data_type)
- {
- case CDF_INT1:
- {
-
- index = 0;
-
- int1_ptr = (Schar *) malloc(NumValues*sizeof(Schar));
-
- while( index <= NumValues - 1)/* convert & copy the values */
- {
- s = *(c_ptr + index);
-
- if(*s == '-')/* a negative number */
- {
- s++;/* get past */
- s = TrimBlanks(s);/* to get rid of blank spaces */
- test_val = -(atoi(s));
- s = *(c_ptr + index);/* reassign */
- }
- else
- test_val = atoi(s);/* to check its range */
-
- if((test_val< -128)||(test_val > 127))
- {
- if (mLog)
- fprintf(stderr,"Numeric value too large for the data type");
- DeleteCDF(id);/* assumes that the id is a global var*/
- ExitBAD;
- }
-
-
- nchar = 0;
-
- if(*s == '-')
- {
- s++;/* get past*/
- s = TrimBlanks(s);/* to eliminate any blanks */
- }
-
- for(i = 0;*(s + i) >= '0'&& *(s + i) <= '9'; ++i)
- nchar = 10*nchar + *(s + i) - '0';/* terminates if a non numeric
- char or if the value exceeds */
-
- if(*(s + i) != '\0')/* a non numeric char or a space*/
- {
- s = TrimBlanks(s + i);
-
- if(*s != '\0')
- {
- if (mLog) fprintf(stderr, "Incorrectly specified value:%s\n",
- *(c_ptr + index));
- DeleteCDF(id);/* assumes that the id is a global var*/
- ExitBAD;
- }
- }
-
- *(int1_ptr + index) = nchar;/* copy this into the array */
-
-
- s = *(c_ptr + index);/* reassign */
- if(*s == '-')
- *(int1_ptr + index) = - *(int1_ptr + index);/* make it negative */
-
- index++;/* the next element of that entry */
-
- }/* end while */
- }
- break;
- case CDF_INT2:
- {
-
- index = 0;
-
- int2_ptr = (short *) malloc(NumValues*sizeof( short));
-
- while( index <= NumValues - 1)/* convert & copy the values */
- {
- s = *(c_ptr + index);
-
- if(*s == '-')/* a negative number */
- {
- s++;/* get past */
- s = TrimBlanks(s);/* to get rid of blank spaces */
- test_val = -(atoi(s));
- s = *(c_ptr + index);/* reassign */
- }
- else
- test_val = atoi(s);/* to check its range */
-
- if((test_val< -32768)||(test_val > 32767))
- {
- if (mLog)
- fprintf(stderr,"Numeric value too large for the data type");
- DeleteCDF(id);/* assumes that the id is a global var*/
- ExitBAD;
- }
-
-
- nchar = 0;
-
- if(*s == '-')
- {
- s++;/* get past*/
- s = TrimBlanks(s);/* to eliminate any blanks */
- }
-
- nshort = 0;
- for(i = 0;*(s + i) >= '0'&& *(s + i) <= '9'; ++i)
- nshort = 10*nshort + *(s + i) - '0';/* terminates if a non numeric
- char or if the value exceeds */
-
- if(*(s + i) != '\0')/* a non numeric char or a space*/
- {
- s = TrimBlanks(s + i);
-
- if(*s != '\0')
- {
- if (mLog) fprintf(stderr, "Incorrectly specified value:%s\n",
- *(c_ptr + index));
- DeleteCDF(id);/* assumes that the id is a global var*/
- ExitBAD;
- }
- }
-
- *(int2_ptr + index) = nshort;/* copy this into the array */
-
- s = *(c_ptr + index);/* reassign */
-
- if(*s == '-')
- *(int2_ptr + index) = - *(int2_ptr + index);/* make it negative */
-
- index++;/* the next element of that entry */
-
- }/* end while */
- }
- break;
- case CDF_INT4:
- {
- int4_ptr = (long *) malloc(NumValues*sizeof(long));/* an array of in*/
-
- index = 0;
-
- while( index <= NumValues - 1)/* convert & copy the values */
- {
- s = *(c_ptr + index);
-
- if(*s == '-')
- {
- s++;
- s = TrimBlanks(s);
- *(int4_ptr + index ) = -atoi(s);
- }
- else
- *(int4_ptr + index) = atoi(s);
- index++;
- }
- }
- break;
- case CDF_UINT1:
- {
- index = 0;
-
- uint1_ptr = (Uchar *) malloc(NumValues*sizeof(Uchar));
- /* an array of char*/
- while( index <= NumValues - 1)/* convert & copy the values */
- {
- s = *(c_ptr + index);
-
- if(*s == '-')/* a negative number */
- {
- if (mLog)
- fprintf(stderr,"Numeric value too large for this data type\n");
- DeleteCDF(id);/* assumes that the id is a global var*/
- ExitBAD;
- }
- else
- test_val = atoi(s);/* to check its range */
-
- if((test_val< 0)||(test_val > 255))
- {
- if (mLog)
- fprintf(stderr,"Numeric value too large for the data type");
- DeleteCDF(id);/* assumes that the id is a global var*/
- ExitBAD;
- }
-
-
- nuchar = 0;
-
-
- for(i = 0;*(s + i) >= '0'&& *(s + i) <= '9'; ++i)
- nuchar = 10*nuchar + *(s + i) - '0';/* terminates if a non numeric
- char or if the value exceeds */
-
- if(*(s + i) != '\0')/* a non numeric char or a space*/
- {
- s = TrimBlanks(s + i);
-
- if(*s != '\0')
- {
- if (mLog) fprintf(stderr, "Incorrectly specified value:%s\n",
- *(c_ptr + index));
- DeleteCDF(id);/* assumes that the id is a global var*/
- ExitBAD;
- }
- }
-
- *(uint1_ptr + index) = nuchar;/* copy this into the array */
-
-
- index++;/* the next element of that entry */
-
- }/* end while */
- }
- break;
- case CDF_UINT2:
- {
- index = 0;
-
- uint2_ptr = (unsigned short *) malloc(NumValues*sizeof(unsigned short));
- /* an array of char*/
-
- while( index <= NumValues - 1)/* convert & copy the values */
- {
- s = *(c_ptr + index);
-
- if(*s == '-')/* a negative number */
- {
- if (mLog)
- fprintf(stderr,"Numeric value too large for this data type\n");
- DeleteCDF(id);/* assumes that the id is a global var*/
- ExitBAD;
- }
- else
- test_val = atoi(s);/* to check its range */
-
- if((test_val< 0)||(test_val > 65535))
- {
- if (mLog)
- fprintf(stderr,"Numeric value too large for the data type");
- DeleteCDF(id);/* assumes that the id is a global var*/
- ExitBAD;
- }
-
- nushort = 0;
-
- for(i = 0;*(s + i) >= '0'&& *(s + i) <= '9'; ++i)
- nushort = 10*nushort + *(s + i) - '0';/* terminates if a non numeric
- char or if the value exceeds */
-
- if(*(s + i) != '\0')/* a non numeric char or a space*/
- {
- s = TrimBlanks(s + i);
-
- if(*s != '\0')
- {
- if (mLog) fprintf(stderr, "Incorrectly specified value:%s\n",
- *(c_ptr + index));
- DeleteCDF(id);/* assumes that the id is a global var*/
- ExitBAD;
- }
- }
-
- *(uint2_ptr + index) = nushort;/* copy this into the array */
-
-
- index++;/* the next element of that entry */
-
- }/* end while */
- }
- break;
- case CDF_UINT4:
- {
- uint4_ptr = (unsigned long *) malloc(NumValues*sizeof(unsigned long));
- /* an array of in*/
- index = 0;
-
- while( index <= NumValues - 1)/* convert & copy the values */
- {
- s = *(c_ptr + index);
-
- if(*s == '-')
- {
- if (mLog)
- fprintf(stderr,"Numeric Value too large for the data type");
- DeleteCDF(id);/* assumes that the id is a global var*/
- ExitBAD;
- }
- else
- *(uint4_ptr + index) = atoi(s);
- index++;
- }
- }
- break;
- case CDF_REAL4:
- {
- real4_ptr = (float *) malloc(NumValues*sizeof(float));
- /* an array of in*/
- index = 0;
-
- while( index <= NumValues - 1)/* convert & copy the values */
- {
- stringToReal4(*(c_ptr + index), &float_val);
- *(real4_ptr + index) = float_val;
- index++;
- }
- }
- break;
- case CDF_REAL8:
- {
-
- real8_ptr = (double *) malloc(NumValues*(sizeof(double)));
- /* an array of real*/
-
- index = 0;
-
- while(index <= NumValues - 1)/* convert & copy the values */
- {
- /* V1.1... */
- stringToReal8(*(c_ptr + index), &double_val);
- *(real8_ptr + index) = double_val;
- /* ...V1.1 */
- index++;
- }/* end while */
- }
- break;
- case CDF_EPOCH:
- {
-
- real8_ptr = (double *) malloc(NumValues*(sizeof(double)));
- /* an array of real*/
-
- index = 0;
-
- while(index <= NumValues - 1)/* convert & copy the values */
- {
- /* V1.1... */
- epochParse(*(c_ptr + index), &epoch);
- *(real8_ptr + index) = epoch.tSince0;
- /* ...V1.1 */
- index++;
- }/* end while */
- }
- break;
- case CDF_BYTE:
- {
-
- index = 0;
-
- int1_ptr = (Schar *) malloc(NumValues*sizeof(Schar));
-
- while( index <= NumValues - 1)/* convert & copy the values */
- {
- s = *(c_ptr + index);
-
- if(*s == '-')/* a negative number */
- {
- s++;/* get past */
- s = TrimBlanks(s);/* to get rid of blank spaces */
- test_val = -(atoi(s));
- s = *(c_ptr + index);/* reassign */
- }
- else
- test_val = atoi(s);/* to check its range */
-
- if((test_val< -128)||(test_val > 127))
- {
- if (mLog)
- fprintf(stderr,"Numeric value too large for the data type");
- DeleteCDF(id);/* assumes that the id is a global var*/
- ExitBAD;
- }
-
-
- nchar = 0;
-
- if(*s == '-')
- {
- s++;/* get past*/
- s = TrimBlanks(s);/* to eliminate any blanks */
- }
-
- for(i = 0;*(s + i) >= '0'&& *(s + i) <= '9'; ++i)
- nchar = 10*nchar + *(s + i) - '0';/* terminates if a non numeric
- char or if the value exceeds */
-
- if(*(s + i) != '\0')/* a non numeric char or a space*/
- {
- s = TrimBlanks(s + i);
-
- if(*s != '\0')
- {
- if (mLog) fprintf(stderr, "Incorrectly specified value:%s\n",
- *(c_ptr + index));
- DeleteCDF(id);/* assumes that the id is a global var*/
- ExitBAD;
- }
- }
-
- *(int1_ptr + index) = nchar;/* copy this into the array */
-
-
- s = *(c_ptr + index);/* reassign */
- if(*s == '-')
- *(int1_ptr + index) = - *(int1_ptr + index);/* make it negative */
-
- index++;/* the next element of that entry */
-
- }/* end while */
- }
- break;
- case CDF_FLOAT:
- {
- real4_ptr = (float *) malloc(NumValues*sizeof(float));/* an array of in*/
-
- index = 0;
-
- while(index <= NumValues - 1)/* convert & copy the values */
- {
- stringToReal4(*(c_ptr + index), &float_val);
- *(real4_ptr + index) = float_val;
- index++;
- }
- }
- break;
- case CDF_DOUBLE:
- {
- real8_ptr = (double *) malloc(NumValues*sizeof(double));/* an array of in*/
- index = 0;
-
- while(index <= NumValues - 1) /* convert & copy the values */
- {
- stringToReal8(*(c_ptr + index), &double_val);
- *(real8_ptr + index) = double_val;
- index++;
- }
- }
- break;
- }/* end switch */
- }
-
- /*---------------------------------------------------------------------*/
-
- long ComputeNRVNum(vararray, numdims, dimsizes)
- /* computes the product of all true dimensions */
- /* returns zero if all dimensions are NOVARY */
-
- long vararray[];/* an array that has info on the current var */
- long numdims;/* number of dimensions of the CDF */
- long dimsizes[];
- {
- long value = 0, index;
-
- for(index=0;index<numdims;index++)
- {
- if(vararray[index + 1]== VARY)
- {
- if(value == 0)
- value++;
- value = value*(vararray[index + 1]*dimsizes[index]);
- }
- }
- if(value < 0)
- value = -value;/* since VARY = -1 */
- return(value);
- }
-
- /*---------------------------------------------------------------------*/
-
- void DeleteCDF(cdfid)
- CDFid cdfid;
- {
- CDFstatus status;
-
- status = CDFdelete(cdfid);
- StatusHandler (status);
-
- return;
- }
-
- /*----------------------------------------------------------------------*/
-
- void CloseCDF(cdfid)
- CDFid cdfid;
- {
- CDFstatus status;
-
- status = CDFclose(cdfid);
- StatusHandler (status);
- }
-
- /*---------------------------------------------------------------------*/
-
- char SelDelimChr(attr_name)
- char attr_name[];
- {/*returns a char to be used as a delimiter in the skeleton table*/
- static char del_array[] = { '"','*','&','^','#' };
- long i;
- for(i= 0; i< 5; i++)
- {
- if(strchr(attr_name,*(del_array + i)) == 0)
- {
- return(*(del_array + i));
- }
- }/* end for */
- if (mLog) fprintf(stderr,"No right delimiter\n");
- DeleteCDF(id);/* assumes that the id is a global var*/
- ExitBAD;
- #if defined(__MSDOS__)
- return ' ';
- #endif
- }
-
-
- #if 0
- /*--------------------------------------------------------------*/
-
- long ProductHigherDims(CurrentDim, DimSizes, numb_dims)
- long CurrentDim;
- long DimSizes[];
- long numb_dims;
- {
- long product, i;
-
- product = 1;
-
- for(i=(CurrentDim + 1); i<numb_dims; i++)
- {
- if(*(DimSizes + i) >0)
- product = product*(*(DimSizes + i));
-
- }/*end for */
-
- return(product);
- }/* */
-
- /*-------------------------------------------------------------*/
-
- long ProductLowerDims(CurrentDim, DimSizes)
- long CurrentDim;
- long DimSizes[];
- {
- long product, i;
-
- product = 1;
-
- for(i= 0; i<CurrentDim; i++)
- {
- if(*(DimSizes + i) >0)
- product = product*(*(DimSizes + i));
-
- }/*end for */
-
- return(product);
- }/* */
-
- /*---------------------------------------------------------------*/
-
- long ComputeHIndexVector(current_item, numb_dims,
- dim_array, var_array, IndVect)
- /* puts the index vector in the IndVect array, for row - major */
- long current_item;
- long numb_dims;/*number of dimensions */
- long dim_array[];/*dimension array of various sizes*/
- long var_array[];/*variances array*/
- long IndVect[];/* Indices */
-
- {
- long i, fake_dims[CDF_MAX_DIMS], next, product, index;
-
- for(i=0;i<11;i++)
- *(IndVect + i) = 0;/* zero initialize it */
-
- for(i = 0; i<numb_dims;i++)
- {
- if(*(var_array + i) == VARY)
- *(fake_dims + i) = *(dim_array + i);
- else
- *(fake_dims + i) = 1;
-
-
- }/* for i*/
-
- next = current_item;
-
- for(i=0;i < numb_dims; i++)
- {
- product = ProductHigherDims( i, fake_dims, numb_dims);
- index = (long) (next/product);
- next = (next%product);
- *(IndVect + i) = index;
- }
-
- return 0; /* Not sure what to return, J Love */
- }
-
- /*--------------------------------------------------------------*/
-
- long ComputeLIndexVector(current_item, numb_dims,
- dim_array, var_array, IndVect)
- /* puts the index vector in the IndVect array, for col - major */
- long current_item;
- long numb_dims;/*number of dimensions */
- long dim_array[];/*dimension array of various sizes*/
- long var_array[];/*variances array*/
- long IndVect[];/* Indices */
-
- {
- long i, fake_dims[CDF_MAX_DIMS], next, product, index;
-
- for(i = 0; i<numb_dims;i++)
- {
- if(*(var_array + i) == VARY)
- *(fake_dims + i) = *(dim_array + i);
- else
- *(fake_dims + i) = 1;
-
- *(IndVect + i) = 0;/* initialize it */
- }/* for i*/
-
- next = current_item;
-
- for(i=numb_dims;i >= 0 ; i--)/* */
- {
- product = ProductLowerDims( i, fake_dims);
- index = (long) (next/product);
- next = (next%product);
- *(IndVect + i) = index;
- }
-
- return 0; /* Not sure what to return, J Love */
- }
- /*-----------------------------------------------------------------------*/
- #endif
-
-
- #if 0
- extern void prtext ( output, format, text )
-
- FILE *output;
- char *format;
- char *text[];
-
- /*
- * Print an array of strings (*text[]) to file output using format.
- * Function iterates on: fprintf (output, format, text[j]);
- * A null string signals end of the array.
- */
- /*CodeRef-mark*/
- {
- long j, nullstring = 0;
- for (j=0; text[j][0] != nullstring; j++)
- fprintf (output, format, text[j]);
- } /* end prtext */
- #endif
-
- /*-------------------------------------------------------------------*/
-
- char *strupper ( string )
-
- char *string;
-
- /*
- * Converts a string to all upper-case, permanent change.
- * The string must be NULL-terminated.
- * Return value is the pointer to the string.
- */
-
- {
- char *saveptr;
- saveptr = string;
-
- while (*string != '\0')
- {
- if((isalpha(*string))&&(islower(*string)))
- *string = toupper(*string);
- string++;
- }
- string = saveptr;
- return (string);
- } /* end strupper */
-
- /*-------------------------------------------------------------------*/
-
- long stringToInt2( string, integer)
-
- char *string;
- short *integer;
-
- {
- short temp;
- long res = 0;
- sscanf(string, "%d", &temp);
-
- *integer = temp;
- return(res);
-
- }
- /*----------------------------------------------------------------------*/
-
- long stringToInt4( string, integer)
-
- char *string;
- long *integer;
-
- {
- long temp;
- long res = 0;
-
- sscanf(string, "%ld", &temp);
-
- *integer = temp;
-
- return(res);
- }
- /*----------------------------------------------------------------------*/
-
- long stringToReal4( string, real_num)
-
- char *string;
- float *real_num;
-
- {
- float temp;
- long res = 0;
-
- sscanf(string, "%f", &temp);
-
- *real_num = temp;
-
- return(res);
- }
- /*---------------------------------------------------------------------*/
-
- long stringToReal8( string, real_num)
-
- char *string;
- double *real_num;
-
- {
- double temp;/* dummy variable */
- long res = 0;/* dummy return code to emulate the fortran version */
-
- sscanf(string, "%lf", &temp);
-
- *real_num = temp;
-
- return(res);
- }
- /*----------------------------------------------------------------------*/
-
- #if 0
- long stringspn(string, chr)
- char *string;
- char *chr;
- {
- long pos, flag;
- char *temp_addr;
-
- flag = 0;
- temp_addr = string;
-
- while(!flag)
- {
- if(*string == *chr)
- {
- pos = string-temp_addr;
- ++flag;
- }
- else if(*string=='\0')
- {
- pos = strlen(temp_addr);
- ++flag;
- }
- else
- string++;
- }
-
- return(pos);
- }
- /*----------------------------------------------------------------------*/
- #endif
-
-
- #if 0 /* THIS IS A BIZARRE WAY TO DO IT */
- extern char *trimToLast ( string, chr )
- char *string;
- char chr;
-
- {
- /* This function Trims from beginning of string to last 'chr' by whittling. */
-
- char *saveString;
-
- long pos = 0;
-
- saveString = (char *) malloc (strlen(string) +1);
- strcpy (saveString, string);
-
- /* Trim from beginning of string to last 'chr' by whittling. */
-
- while (pos = (stringspn(saveString, &chr) < strlen(saveString)))
- {
- strcpy (string, &saveString[pos]);
- strcpy (saveString, string);
- }
- free (saveString);
- return (string);
- } /* end trimToLast */
- #endif
-
- #if 0
- /* HOPEFULLY THIS MAKES MORE SENSE TO TURBO-C ON THE IBM-PC */
-
- char *trimToLast (string, chr)
- char *string;
- char chr;
- {
- char *cp;
- if ((cp = strrchr(string,chr)) != NULL)
- memmove (string, cp + 1, strlen(cp+1) + 1);
- return string;
- }
- /*--------------------------------------------------------------------*/
- #endif
-
-
- #if 0
- char *trimToFirst ( string , chr)
-
- char *string;
- char chr;
- {
- /*
- this function trims UPTO the first occurance of the given
- character chr
- */
-
- char *saveString;
-
- long pos = 0;
-
- saveString = ( char *)malloc (strlen(string) +1);
- strcpy (saveString, string);
-
- if(chr == '/')
- {
- while(( pos = stringspn (saveString, &chr)) <strlen(saveString))
- {
- strcpy (string, &saveString[pos+1]);
- strcpy (saveString, string);
- }
- }
- else
- {
- if (( pos = stringspn (saveString, &chr)) <strlen(saveString))
- {
- strcpy (string, &saveString[pos+1]);
- strcpy (saveString, string);
- }
- }
- free (saveString);
- return (string);
- } /* end trimToFirst */
- /*-------------------------------------------------------------------*/
- #endif
-
-
- char *ProcessWrapLines(fp, buffer, message)
- FILE *fp;
- char buffer[];
- char message[];
- {
-
- long flag = 0, len;
- char *buff;
-
- while(flag == 0)
- {
- if(fgets(buffer, 134, fp) == NULL)
- {
- if (mLog) fprintf(stderr,"%s\n", message);
- DeleteCDF(id);
- ExitBAD;
- }
-
- len = strlen(buffer);
-
- *(buffer + (len - 1)) = '\0';
-
- buff = TrimBlanks(buffer);
-
- switch(*buff)
- {
- case '\0':
- {
- buff = ProcessWrapLines(fp,buffer, message);
- flag++;
- }
- break;
- case '!':
- {
- buff = ProcessWrapLines(fp, buffer, message);
- flag++;
- }
- break;
- default:
- flag++;
- break;
- }/* end switch */
- }/* end while */
-
- return(buff);
-
- }/* ProcessWrapLines */
-
- /*--------------------------------------------------------------------------*/
-
- long IsDelimString(addr )/* checks if the string is delimited string or
- not */
- char addr[];
- {
- long ret;
- char delim;
-
- delim = *addr;
-
- if((isdigit(*addr) != 0)||(isalpha(*addr) != 0))
- {
- ret = 0;
- return(ret);
- }
-
- addr++;/* move by 1 */
-
- while((*addr != delim)&&(*addr != '\0'))
- addr++;
-
- switch(*addr)
- {
- case '\0':
- {
- ret = 0;
- break;
- }
- default:
- {
- ret = 1;
- break;
- }
-
- }
- return(ret);
- }/* isDelimString */
-
- /*--------------------------------------------------------------------------*/
-
- /******************************************************************************
- * StatusHandler.
- ******************************************************************************/
-
- void StatusHandler (status)
- CDFstatus status;
- {
- char text[CDF_STATUSTEXT_LEN + 1];
-
- if (status == CDF_OK) return; /* Do nothing. */
-
- CDFlib (SELECT_, CDF_STATUS_, status,
- GET_, STATUS_TEXT_, text,
- NULL_);
-
- if (status < CDF_WARN) {
- printf ("\nERROR> %s\n", text);
- CDFdelete (id); /* Return status ignored. */
- ExitBAD;
- }
- else
- if (mLog)
- if (status < CDF_OK)
- printf ("WARNING> %s\n", text);
- else
- printf ("INFO> %s\n", text);
-
- return;
- }
-